#!/usr/bin/env ruby

$LOAD_PATH << File.expand_path("../../lib")

require 'flgrcore'
require 'flgrdatatools'

#############################################################
### PROCEDURES ##############################################
#############################################################

def constructPriorityStack(imin, minGray=0, maxGray=255)
  pstack = Flgrdatatools::flgr_pstack_create(imin.type)

  for i in 0..imin.sizeY-1
    for j in 0..imin.sizeX-1
        if (imin[i][j]>=minGray) and (imin[i][j]<=maxGray)
          Flgrdatatools::flgr_pstack_push(pstack, imin[i][j], i, j)
        end
    end
  end
  return pstack
end

def fillImageWithPStack(imout,pstack)
  stack = Flgrdatatools::flgr_pstack_get_first_no_empty_stack(pstack)
  for i in 0..pstack.nbPriority-1

    color = Flgrdatatools::flgr_pstack_get_label_stack(stack)
    while stack.size>0
      pixel=Flgrdatatools::flgr_pstack_pop_stack(stack)
      row = pixel[1]
      col = pixel[2]
      imout[row][col]=color
    end

    stack = stack.next

  end
end

#############################################################
### MAIN ####################################################
#############################################################

imin = Flgrcore::flgr2d_load_pgm('/home/christophe/images/Gray/lena.pgm','input')
imout = Flgrcore::FLGR_Data2D.new(imin,"out")

pstack = constructPriorityStack(imin)

fillImageWithPStack(imout,pstack)

Flgrcore::flgr2d_save_pgm(imout)
